package com.example.demo.model;

import lombok.Data;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Data
@Component
public class Student {
    private String name;
    private Integer age;
    private String address;


    public void m1() {
        System.out.println("Student init...");
    }

    /**
     * 重写toString方法，以便我们能够直观地看到参数的传递*/
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }

    /**
     * 参数传递现象记载：
     *  1，若是仅有一个对象，且该对象类型符合参数要求，则使用该对象作为参数
     *  2，若是存在多个符合类型要求的对象，且每个对象的名称都与形参名不一致，则报错
     *  3，若是存在多个符合类型要求的对象，且存在一个对象的名称与形参名一致，则使用该对象作为参数
     *  4，若是存在多个方法，则每个方法的判定规则与上述一致，并无区别，因为每个参数都可以复用*/
    @Bean
    public String name1() {
        return "Jack";
    }
    @Bean
    public String name() {
        return "Jat";
    }

    @Bean
    public Student studentOne(String name) {
        Student student = new Student();
        student.name = name;
        student.age = 18;
        student.address = "Hunan Province";
        return student;
    }

    @Bean(name = {"s1", "ss"})
    public Student studentTwo() {
        Student student = new Student();
        student.name = "Linda";
        student.age = 24;
        student.address = "Beijing";
        return student;
    }
}
